/*
*******************************************************************************
*                     《手把手教你学51单片机(C语言版)》
* 文件名：main.c
* 描  述：第5章 例程代码
* 版本号：v1.0.0
* 备  注：利用定时器实现闪烁LED
*******************************************************************************
*/
#include <reg52.h>

sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
	//声明语句
	unsigned char cnt = 0;
	//执行语句
	ENLED = 0;	//使能U3（74H138）
	ADDR3 = 1;	//使LEDS6为低电平来让LED所在的三极管Q16导通
	ADDR2 = 1;
	ADDR1 = 1;
	ADDR0 = 0;
	
	TMOD = 0x01;	//设置定时器模式寄存器为T0的工作模式1
	TH0 = 0xB8;	//定时器0.02s
	TL0 = 0x00;
	TR0 = 1;	//启动T0
	while(1)
	{
		if(TF0 == 1)	//判断定时器是否溢出
		{
			TF0 = 0;	//定时器溢出后（记到0.02s了），清除中断标志（软件清零）
			TH0 = 0xB8;	//因为定时器要溢出重新计数（T0被清零），所以需要重新赋值让他从0xB8开始计
			TL0 = 0x00;
			cnt++;
			if(cnt >= 50)	//T0溢出50次就达到1秒了
			{
				cnt = 0;	//将cnt清零
				LED = ~LED;	//LED取反即为LED的亮灭
			}
		}
	}
}